package utils

import (
	"context"
	"errors"
	"fmt"
	"github.com/redis/go-redis/v9"
	"time"
)

// GenerateToken 定义生成token的方法
func GenerateToken(redisDb *redis.Client, id int64, data string, prefix string) (string, error) {
	// 定义过期时间,7天后过期
	token := UuIdV4()
	// 删除之前redis中的token
	redisKey := fmt.Sprintf("%s_redis_token_%d", prefix, id)
	value, _ := redisDb.Get(context.Background(), redisKey).Result()
	if value != "" {
		_, err := redisDb.Del(context.Background(), value).Result()
		if err != nil {
			return "", err
		}
	}
	// 存储到redis中
	_, err := redisDb.Set(context.Background(), redisKey, token, 1*24*60*60*time.Second).Result()
	_, err = redisDb.Set(context.Background(), token, data, 1*24*60*60*time.Second).Result()
	if err != nil {
		return "", errors.New("token存储到数据库失败")
	}
	return token, nil
}
